/**
 * 
 */
package cl.duocap.refaxion.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;



import cl.duocap.refaxion.dto.TallerDTO;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 
 *
 */
public class TallerDAO {

	/**
	 * 
	 */
	private Connection conexion;
	
	
public TallerDAO() {
		
	}

	
		public Connection getConexion() {
		return conexion;
	}


	public void setConexion(Connection conexion) {
		this.conexion = conexion;
	}

	public boolean registrarTallerNuevo(TallerDTO tallerNuevo) {
		
		try {
			
			
			CallableStatement cstmt = conexion.prepareCall("{ call paInsRefaxionRegistrarTallerNuevo(?,?,?,?,?,?)}");
	
			int i = 1;
			//cstmt.setInt(i++,tallerNuevo.getIdTaller());
			cstmt.setString(i++,tallerNuevo.getTallerDescripcion());
			cstmt.setString(i++,tallerNuevo.getDireccion());
			cstmt.setString(i++,tallerNuevo.getTelefono());			
			cstmt.setInt(i++,tallerNuevo.getEstado());
			cstmt.setString(i++,tallerNuevo.geteMail());
			cstmt.setString(i++,tallerNuevo.getFechaIngreso());
			
			cstmt.executeUpdate();
			cstmt.close();
			
			return true;
			
	
	
	 } catch (SQLException ex) {
         throw new RuntimeException("registrar taller.",ex);     
        
    }finally {
         try{
        	 conexion.close();
        }catch (Exception ex){
            
        }
        try{
            conexion.close();
        }catch (Exception ex){
        	 return false;
        }
        
    }
	
}

public List<TallerDTO> obtenerTalleres() {
		
		List<TallerDTO> lista = new ArrayList<TallerDTO>();
        ResultSet rs= null;
        
		try {

			CallableStatement cstmt = conexion.prepareCall("{ call paConlistaTalleres()}");
			rs = cstmt.executeQuery();
			
			 while (rs.next()){
                 
				    TallerDTO taller = new TallerDTO();
				    taller.setIdTaller(rs.getInt("idTaller"));
				    taller.setTallerDescripcion(rs.getString("tallerDescripcion"));
				    taller.setDireccion(rs.getString("direccion"));
				    taller.setTelefono(rs.getString("telefono"));
				    taller.setEstado(rs.getInt("estado"));
				    taller.seteMail(rs.getString("eMail"));
				    taller.setFechaIngreso(rs.getString("fechaingreso"));
				  
				   
	            	lista.add(taller);
	            	
	          }

	        } catch (SQLException ex) {
	             throw new RuntimeException("listar Talleres Disponibles.",ex);                    
	        }finally {
	             try{
	                rs.close();
	                conexion.close();
	            }catch (Exception ex){
	                
	            }
	            try{
	            	rs.close();
	                conexion.close();
	            }catch (Exception ex){
	                
	            }
	            
	        }
		
		return lista;
}

public boolean eliminarTaller(int idTaller){

	try {
		
		
		CallableStatement cstmt = conexion.prepareCall("{ call paUpdRefaxionEliminarTaller(?)}");
		int i=1;
		cstmt.setInt(i++,idTaller);
		cstmt.executeUpdate();
		cstmt.close();
		
	 } catch (SQLException ex) {
         throw new RuntimeException("error: eliminar taller.",ex);   
         
    }finally {
         try{
        	 conexion.close();
        	 return false;
        }catch (Exception ex){
            
        }
        try{
        	
            conexion.close();
            return false;
        }catch (Exception ex){
            
        }
        
    }	
	return true;
		
}


//metodo para la edicion de la informacion de un taller
public boolean editarTaller(TallerDTO tallerEditar){

	try {
			CallableStatement cstmt = conexion.prepareCall("{ call paUpdRefaxionEditarTaller(?,?,?,?,?,?,?)}");
	
			int i = 1;
			cstmt.setInt(i++,tallerEditar.getIdTaller());
			cstmt.setString(i++,tallerEditar.getTallerDescripcion());
			cstmt.setString(i++,tallerEditar.getDireccion());
			cstmt.setString(i++, tallerEditar.getTelefono());
			cstmt.setInt(i++, tallerEditar.getEstado());
			cstmt.setString(i++,tallerEditar.geteMail());
			cstmt.setString(i++,tallerEditar.getFechaIngreso());
			
			cstmt.executeUpdate();
			cstmt.close();
			
	} catch (Exception ex) {
		throw new RuntimeException("error en DAO: editartaller.",ex); 
	}finally {
		   
        try{
       	 	  conexion.close();
       	 
           }catch (Exception ex){
           
           }
           try{
        		conexion.close();
           
        	   }catch (Exception ex){      
        	   }
   
   	}			
			return true;		
}

public TallerDTO traerTallerEditar(int idtaller) {

	
	   ResultSet rset = null;
	   TallerDTO tallerEditar = new TallerDTO();
	   
		try {
				
				
				CallableStatement cstmt = conexion.prepareCall("{ call paUpdRefaxionTraerTallerEditar(?)}");
				
				int i = 1;
				cstmt.setInt(i++,idtaller);
				rset = cstmt.executeQuery();
				while (rset.next()) {
					
					tallerEditar = new TallerDTO();
					tallerEditar.setIdTaller(rset.getInt("idTaller"));
					tallerEditar.setTallerDescripcion(rset.getString("tallerDescripcion"));
					tallerEditar.setDireccion(rset.getString("direccion"));			
					tallerEditar.setTelefono(rset.getString("telefono"));
					tallerEditar.setEstado(rset.getInt("estado"));
					tallerEditar.seteMail(rset.getString("eMail"));
					tallerEditar.setFechaIngreso(rset.getString("fechaIngreso"));
					
					
				}
				cstmt.close();
			
			
			
		   } catch (SQLException ex) {
			   
		        throw new RuntimeException("error traer Taller editar.",ex);   
		        
			   }finally {
				   
			        try{
			       	 	  conexion.close();
			       	 
			           }catch (Exception ex){
			           
			           }
			           try{
			        		conexion.close();
			           
			        	   }catch (Exception ex){      
			        	   }
			   	}
		SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd-MM-yyyy");
		 String strFecha = tallerEditar.getFechaIngreso();
		 Date fecha = null;
		 try {

		     fecha = formatoDelTexto.parse(strFecha);

		 } catch (ParseException ex) {

		     ex.printStackTrace();

		 }

		 tallerEditar.setFechaIngresoTrans(fecha);

		 	return tallerEditar;
	}		

}
